package com.atguigu.jxc.controller;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author 杨林
 * @create 2023-01-28 9:33 星期六
 * description:
 */
@RequestMapping("/goods")
@RestController
public class GoodsController {


    @Autowired
    GoodsService goodsService;

    /**
     * 查询当前库存（可根据商品类别 商品编码或商品名称搜索）
     * @return
     */
    @PostMapping("/listInventory")
    public Map<String,Object> listInventory( Integer page,
                                             Integer rows,
                                             String codeOrName,
                                             Integer goodsTypeId){
        return goodsService.listInventory(page,rows,codeOrName,goodsTypeId);
    }




    @PostMapping("/list")
    public Map<String,Object> list( Integer page,
                                    Integer rows,
                                    String goodsName,
                                    Integer goodsTypeId){
        return goodsService.list(page,rows,goodsName,goodsTypeId);
    }

    /**
     * 商品添加或修改
     * @return
     */
    @PostMapping("/save")
    public ServiceVO saveOrUpdate(Goods goods){

        return goodsService.saveOrUpdate(goods);
    }

    /**
     * 返回商品编码
     * @return
     */
    @PostMapping("/getCode")
    public ServiceVO getCode(){

        return goodsService.getCode();
    }


    /**
     * 根据id删除商品 (要判断商品状态,入库、有进货和销售单据的不能删除)
     * @param goodsId
     * @return
     */
    @PostMapping("/delete")
    public ServiceVO delete(Integer goodsId){

        return goodsService.delete(goodsId);
    }

    /**
     * 展示无库存商品列表
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    @PostMapping("/getNoInventoryQuantity")
    public Map<String,Object> getNoInventoryQuantity(Integer page,
                                                     Integer rows,
                                                     String nameOrCode){

        return goodsService.getNoInventoryQuantity(page,rows,nameOrCode);
    }


    /**
     * 有库存商品列表展示（可以根据商品名称或编码查询）
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    @PostMapping("/getHasInventoryQuantity")
    public Map<String,Object> getHasInventoryQuantity(Integer page,
                                                     Integer rows,
                                                     String nameOrCode){

        return goodsService.getHasInventoryQuantity(page,rows,nameOrCode);
    }

    /**
     * 添加库存、修改数量或成本价 (根据goodsId)
     * @param goodsId
     * @param inventoryQuantity
     * @param purchasingPrice
     * @return
     */
    @PostMapping("/saveStock")
    public ServiceVO saveStock(Integer goodsId,Integer inventoryQuantity,double purchasingPrice){

        return goodsService.saveStock(goodsId,inventoryQuantity,purchasingPrice);
    }

    /**
     * 删除库存（要判断商品状态 入库、有进货和销售单据的不能删除）
     * @param goodsId
     * @return
     */
    @PostMapping("/deleteStock")
    public ServiceVO deleteStock(Integer goodsId){

        return goodsService.deleteStock(goodsId);
    }


    /**
     * 查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    @PostMapping("/listAlarm")
    public Map<String,Object> listAlarm(){

        return goodsService.listAlarm();
    }
}
